package edu.eam.gruposenior.gestorLEcciones.controladores;

import java.util.Date;
import java.util.List;

import javax.persistence.EntityManager;

import edu.eam.gruposenior.gestorLEcciones.entidades.Proyecto;
import edu.eam.gruposenior.gestorLEcciones.entidades.ProyectoTecnologia;
import edu.eam.gruposenior.gestorLEcciones.entidades.Tecnologia;
import edu.eam.gruposenior.gestorLEcciones.entidades.TipoProyecto;
import edu.eam.gruposenior.gestorLEcciones.entidades.Usuario;
import edu.eam.gruposenior.gestorLEcciones.entidades.UsuarioProyecto;
import edu.eam.gruposenior.gestorLEcciones.util.FactoryEntityManager;

public class ProyectoController {

	private EntityManager em = FactoryEntityManager.getEm();

	public void crearProyecto(String nombre, String descripcion,
			Boolean estado, Date fechaInicio, Date fechaFin, int iteraciones,
			TipoProyecto tipoProyectoBean, Tecnologia tec) {

		em.getTransaction().begin();

		Proyecto proyecto = new Proyecto();

		proyecto.setDescripcion(descripcion);
		proyecto.setEstado(estado);
		proyecto.setFechaInicio(fechaInicio);
		proyecto.setFechaFin(fechaFin);
		proyecto.setIteraciones(iteraciones);
		proyecto.setNombre(nombre);
		proyecto.setTipoProyectoBean(tipoProyectoBean);

		em.persist(proyecto);

		ProyectoTecnologia proTec = new ProyectoTecnologia();

		proTec.setProyectoBean(proyecto);
		proTec.setTenologia(tec);

		em.persist(proTec);

		em.getTransaction().commit();

	}

	public void editarProyecto(String nombre, String descripcion,
			Boolean estado, Date fechaInicio, Date fechaFin, int iteraciones,
			TipoProyecto tipoProyectoBean, Tecnologia tec) throws Exception {
		
		Proyecto proyecto=buscarProyecto(nombre);
		
		if(proyecto!=null){
			
			em.getTransaction().begin();

			proyecto.setDescripcion(descripcion);
			proyecto.setEstado(estado);
			proyecto.setFechaInicio(fechaInicio);
			proyecto.setFechaFin(fechaFin);
			proyecto.setIteraciones(iteraciones);
			proyecto.setNombre(nombre);
			proyecto.setTipoProyectoBean(tipoProyectoBean);

			em.merge(proyecto);

			ProyectoTecnologia proTec=proyecto.getProyectoTecnologias().get(0);

			proTec.setProyectoBean(proyecto);
			proTec.setTenologia(tec);

			em.merge(proTec);

			em.getTransaction().commit();
			
		}else{
			throw new Exception("El proyecto no existe");
		}

	}
	
	public void crearProyectoUsuario(Proyecto pro,Usuario usu){
		
		em.getTransaction().begin();
		
		UsuarioProyecto usuPro=new UsuarioProyecto();
		
		usuPro.setProyectoBean(pro);
		usuPro.setUsuarioBean(usu);
		
		em.persist(usuPro);
		
		em.getTransaction().commit();
	}

	public Proyecto buscarProyecto(String nombre) {
		
		Proyecto pro=null;
		
		List<Proyecto> lisPro= em.createNamedQuery(Proyecto.FIND_PROYECTO_BY_NOMBRE)
				.setParameter(Proyecto.PARAMETRO_NOMBRE, nombre)
				.getResultList();
		
		 if(lisPro.size()>0){
			 pro= lisPro.get(0);
		 }
		 
		 return pro;
	}
	
	

	public List<Proyecto> proyectos() {
		return FactoryEntityManager.getEm().createNamedQuery(Proyecto.FIND_ALL)
				.getResultList();
	}

	public List<TipoProyecto> tiposProyectos() {
		return FactoryEntityManager.getEm()
				.createNamedQuery(TipoProyecto.FIND_ALL).getResultList();
	}

}
